جزوه · فصل چهارم · جلسه ۴۳ · بکاپ گرفتن با tar و dd ← بازگشت به فهرست
📘 فصل چهارم · جلسه ۴۳ بکاپ گرفتن با tar و dd
📅 تاریخ: دوشنبه، ۲۶ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat

▍ مقدمه

بکاپ‌گیری (Backup) یکی از مهم‌ترین وظایف هر مدیر سیستم است. در لینوکس، ابزارهای قدرتمندی برای بکاپ‌گیری وجود دارند که از جمله مهم‌ترین آنها tar و dd هستند. در این جلسه، با روش‌های پیشرفته بکاپ‌گیری با tar و کپی سطح پایین با dd آشنا می‌شویم.

🔑 دو روش اصلی بکاپ‌گیری:
  • بکاپ فایل‌ها با tar → مناسب برای فایل‌ها و دایرکتوری‌ها
  • بکاپ دیسک با dd → مناسب برای کپی کامل دیسک و پارتیشن

▍ بکاپ‌گیری افزایشی (Incremental Backup) با tar

بکاپ افزایشی به این معناست که فقط فایل‌هایی که از زمان بکاپ قبلی تغییر کرده‌اند، در بکاپ جدید ذخیره می‌شوند. این کار باعث صرفه‌جویی در فضا و زمان می‌شود.

📝 بکاپ افزایشی با tar:

در این روش، از یک فایل snapshot برای ذخیره اطلاعات نسخه قبلی استفاده می‌شود.

┌──(ya3in㉿kali)-[~] └─$ tar -g FullArchive.snar -Jcvf Project42.txz Project4?.txt Project42.txt
Project43.txt
Project44.txt
Project45.txt
Project46.txt

توضیح:

  • -g FullArchive.snar → ایجاد/استفاده از فایل snapshot برای بکاپ افزایشی
  • -Jcvf → فشرده‌سازی با xz، ایجاد آرشیو، نمایش جزئیات
  • Project42.txz → نام فایل آرشیو
  • Project4?.txt → فایل‌هایی که شامل می‌شوند
┌──(ya3in㉿kali)-[~] └─$ ls FullArchive.snar Project42.txz FullArchive.snar Project42.txz

توضیح: فایل FullArchive.snar اطلاعات نسخه اولیه را ذخیره کرده است.

┌──(ya3in㉿kali)-[~] └─$ echo "Answer to everything" >> Project42.txt

توضیح: یک تغییر در فایل Project42.txt ایجاد می‌کنیم (افزودن یک خط جدید).

┌──(ya3in㉿kali)-[~] └─$ tar -g FullArchive.snar -Jcvf Project42_Inc.txz Project4?.txt Project42.txt

توضیح: در بکاپ دوم، فقط فایل Project42.txt که تغییر کرده است، در آرشیو جدید ذخیره می‌شود. فایل‌های دیگر چون تغییر نکرده‌اند، در بکاپ جدید نمی‌آیند.

┌──(ya3in㉿kali)-[~] └─$ ls Project42_Inc.txz Project42_Inc.txz

توضیح: فایل آرشیو جدید فقط شامل تغییرات (فایل Project42.txt) است.

💡 مزیت بکاپ افزایشی:
  • فضای کمتری اشغال می‌شود.
  • زمان کمتری برای بکاپ‌گیری نیاز است.
  • مناسب برای بکاپ‌گیری روزانه یا ساعتی.

▍ بکاپ کامل دیسک با dd

dd یک ابزار سطح پایین است که می‌تواند بایت‌به‌بایت از یک دیسک یا پارتیشن کپی بگیرد. این روش برای کلون کردن دیسک یا پشتیبان‌گیری کامل بسیار مفید است.

📝 بکاپ دیسک با dd:
┌──(ya3in㉿kali)-[~] └─$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 4M 0 disk └─sdb1 8:17 0 4M 0 part sdc 8:32 0 1G 0 disk └─sdc1 8:33 0 1023M 0 part

توضیح: دو دیسک sdb (۴ مگابایت) و sdc (۱ گیگابایت) را مشاهده می‌کنید.

┌──(ya3in㉿kali)-[~] └─$ dd if=/dev/sdb of=/dev/sdc status=progress 8192+0 records in
8192+0 records out
4194304 bytes (4.2 MB) copied, 0.232975 s, 18.0 MB/s

توضیح:

  • if=/dev/sdb → ورودی (Input File) = دیسک sdb
  • of=/dev/sdc → خروجی (Output File) = دیسک sdc
  • status=progress → نمایش پیشرفت عملیات
  • نتیجه: دیسک sdb به‌طور کامل روی دیسک sdc کپی شد.
⚠️ هشدار مهم!

دستور dd بسیار خطرناک است. اگر به‌اشتباه ورودی و خروجی را عوض کنید، ممکن است تمام داده‌های خود را از دست بدهید. همیشه قبل از اجرا، از صحت دستور مطمئن شوید.

▍ مقایسه روش‌های بکاپ

ویژگی tar dd
سطح فایل‌ها و دایرکتوری‌ها سطح پایین (بایت‌به‌بایت)
بکاپ افزایشی ✅ بله (با -g) ❌ خیر
فشرده‌سازی ✅ بله (با -z, -j, -J) ❌ خیر
مناسب برای بکاپ فایل‌ها کلون دیسک و پارتیشن
سرعت سریع متوسط (بسته به اندازه)
خطر کم زیاد (در صورت اشتباه)
✅ تمرین پیشنهادی:
  • با fallocate چند فایل تست بسازید.
  • یک بکاپ کامل با tar -cvf ایجاد کنید.
  • یک فایل را تغییر دهید و با tar -g یک بکاپ افزایشی بگیرید.
  • با lsblk دیسک‌های خود را بررسی کنید.
  • اگر یک دیسک خالی دارید، با dd یک بکاپ کامل از آن بگیرید.